﻿using Services.Model;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Services.ViewModel
{
    public interface IWebServices
    {
        Uri UriBase { get; set; }
        /// <summary>
        /// Get All Books Data Async
        /// </summary>
        /// <param name="device_udid"></param>
        /// <param name="limit"></param>
        /// <param name="offset"></param>
        /// <returns></returns>
        Task<GetAllBooks> GetAllBooksDataAsync(string device_udid, string limit, string offset);
        /// <summary>
        /// Get Genres Data Async
        /// </summary>
        /// <returns></returns>
        Task<Genres> GetGenresDataAsync();
        /// <summary>
        /// Get Buy Books Async
        /// </summary>
        /// <param name="book_id"></param>
        /// <param name="device_udid"></param>
        /// <returns></returns>
        Task<BuyBooks> GetBuyBooksAsync(string book_id, string device_udid);
        /// <summary>
        /// Get Book Detail Async
        /// </summary>
        /// <param name="book_id"></param>
        /// <param name="device_udid"></param>
        /// <returns></returns>
        Task<GetBookDetail> GetBookDetailAsync(string book_id, string device_udid);
        /// <summary>
        /// Get All Hot Book
        /// * Note: limit
        ///default limit is 10
        /// </summary>
        /// <param name="limit"></param>
        /// <returns></returns>
        Task<HotBooks> GetAllHotBooksAsync(string limit);
        /// <summary>
        /// Get West Books Async
        /// * Note: limit
        ///default limit is 10
        /// </summary>
        /// <param name="limit"></param>
        /// <returns></returns>
        Task<NewestBooks> GetWestBooksAsync(string limit);
        /// <summary>
        /// * Note: limit
        ///default limit is 10
        /// </summary>
        /// <param name="book_id"></param>
        /// <param name="limit"></param>
        /// <returns></returns>
        Task<RecommendBooks> GetRecommendBooks(string book_id, string limit);
        /// <summary>
        /// Get Regist Device
        /// </summary>
        /// <param name="device_udid"></param>
        /// <returns></returns>
        Task<RegisterDevice> GetRegistDevice(string device_udid);

        /// <summary>
        /// * Note: limit, offset must be integer			
        ///default limit is 100			
        ///default offset is 0			
        ///type: 1 is search by genre name/ 2 is search by author name			
        /// </summary>
        /// <param name="limit"></param>
        /// <param name="offset"></param>
        /// <param name="type"></param>
        /// <param name="keyword"></param>
        /// <returns></returns>
        Task<SearchBooks> GetSearchDataBooksAsync(string limit, string offset, string type, string keyword);
        /// <summary>
        /// Get Series Books Async
        /// </summary>
        /// <param name="genre_id"></param>
        /// <param name="limit"></param>
        /// <param name="offset"></param>
        /// <returns></returns>
        
        Task<Series> GetSeriesBooksAsync(string genre_id, string limit, string offset);
        /// <summary>
        /// Tesst
        /// </summary>
        /// <param name="genre_id"></param>
        /// <returns></returns>
        Task<Series> GetSeriesBooksAsync(string genre_id);
        /// <summary>
        /// Get Series Book Detail Async
        /// </summary>
        /// <param name="series_id"></param>
        /// <returns></returns>
        Task<SeriesBooksDetail> GetSeriesBookDetailAsync(string series_id);
    }
}
